﻿// Option.cpp: 实现文件
//

#include "pch.h"
#include "MFCTest2.h"
#include "afxdialogex.h"
#include "Option.h"


// Option 对话框

IMPLEMENT_DYNAMIC(Option, CDialogEx)

Option::Option(CWnd* pParent /*=nullptr*/)
	: CDialogEx(IDD_DIALOG_OPTION, pParent)
	, m_nLineWidth(1)
	, m_nLineStyle(0)
	, m_color(RGB(0, 0, 0))
{

}

Option::~Option()
{
}

void Option::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Slider(pDX, IDC_SLIDER_LINE_WIDTH, m_nLineWidth);
	DDV_MinMaxUInt(pDX, m_nLineWidth, 1, 30);
	DDX_Radio(pDX, IDC_RADIO_SOLID, m_nLineStyle);
}


BEGIN_MESSAGE_MAP(Option, CDialogEx)
	ON_BN_CLICKED(IDC_BUTTON_LINE_COLOR, &Option::OnBnClickedButtonLineColor)
	ON_BN_CLICKED(IDC_RADIO_SOLID, &Option::OnBnClickedRadioSolid)
	ON_BN_CLICKED(IDC_RADIO_DASH, &Option::OnBnClickedRadioDash)
	ON_BN_CLICKED(IDC_RADIO_DOT, &Option::OnBnClickedRadioDot)
	ON_WM_PAINT()
	ON_WM_HSCROLL()
END_MESSAGE_MAP()


// Option 消息处理程序


BOOL Option::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// TODO:  在此添加额外的初始化
	CSliderCtrl* slide = (CSliderCtrl*)GetDlgItem(IDC_SLIDER_LINE_WIDTH);
	slide->SetRange(1, 30);
	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}


void Option::OnBnClickedButtonLineColor()
{
	// TODO: 在此添加控件通知处理程序代码
	CColorDialog colorDlg(m_color, CC_FULLOPEN | CC_RGBINIT);
	if (IDOK == colorDlg.DoModal())
	{
		m_color = colorDlg.m_cc.rgbResult;
		Invalidate();
	}
}


void Option::OnBnClickedRadioSolid()
{
	// TODO: 在此添加控件通知处理程序代码
	Invalidate();
}


void Option::OnBnClickedRadioDash()
{
	// TODO: 在此添加控件通知处理程序代码
	Invalidate();
}


void Option::OnBnClickedRadioDot()
{
	// TODO: 在此添加控件通知处理程序代码
	Invalidate();
}


void Option::OnPaint()
{
	CPaintDC dc(this); // device context for painting
	// TODO: 在此处添加消息处理程序代码
	UpdateData();
	CPen pen(m_nLineStyle, m_nLineWidth, m_color);
	CPen* pOldPen = dc.SelectObject(&pen);

	// 获得示例组件的坐标
	CRect rect;
	GetDlgItem(IDC_GROUP_SAMPLE)->GetWindowRect(&rect);
	ScreenToClient(&rect);

	dc.MoveTo(rect.left + 20, rect.top + rect.Height() / 2);
	dc.LineTo(rect.right - 20, rect.top + rect.Height() / 2);

	dc.SelectObject(pOldPen);
	// 不为绘图消息调用 CDialogEx::OnPaint()
}


void Option::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	Invalidate();
	CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
}
